import { inject, injectable } from 'inversify'
import { LocalDB } from '../db/DatabaseInit'

export interface NotebookModel {
  id: number
  name: string
  create_at?: string | null
  update_at?: string | null
}

// @injectable表明将当前类注入到ioc容器中
@injectable()
export class NotebooksService {
  name = 'notebooks'

  // 通过构造方法，可以实现，自动将ioc容器中实例，注入到当前实例对象中. 如: localDB: LocalDB, 后续的类方法就可直接使用
  constructor(@inject(LocalDB) public localDB: LocalDB) {}

  /**
   * 插入数据，并返回插入数据的主键
   * @param data 待插入数据
   * @returns 已插入数据的主键
   */
  async create(data: { name: string }) {
    return await this.localDB.db.table(this.name).insert(data)
  }

  async get(id: number) {
    return await this.localDB.db
      .table<NotebookModel>(this.name)
      .select('*')
      .where('id', '=', id)
      .first()
  }

  async delete(id: number) {
    return await this.localDB.db.table(this.name).where('id', '=', id).delete()
  }

  async update(data: { id: number; name: string }) {
    return await this.localDB.db
      .table(this.name)
      .where('id', '=', data.id)
      .update({ name: data.name })
  }

  async getAll() {
    return await this.localDB.db.table<NotebookModel>(this.name).select('*')
  }
}
